--- %%NOBANNER%% -->
/*------------------<--- Start of Description -->--------------------\
| TO PRODUCE YX SCATTER PLOT WITH CORRELATION AND REGRESSION DATA |
| APPENDED AT THE BOTTOM OF THE PAGE. THE MACRO CAN USE EITHER PLOT |
| OR GPLOT. FOR GPLOT THE GRAPH CAN OPTIONALLY INCLUDE THE REGRESSION|
| LINE OF Y ON X ALONG WITH CONFIDENCE LIMITS FOR EITHER MEAN Y OR |
| INDIVIDUAL PREDICTED Y'S. |
|--------------------<--- End of Description -->---------------------|
|--------------------------------------------------------------------|
|--------------<--- Start of Files or Arguments Needed -->-----------|
| PARAMETERS: DATA=INPUT DATA SET CONTAINING Y & X VARS. |
| YVAR=VARIABLE TO PLOT ON VERTICAL AXIS. |
| XVAR=VARIABLE TO PLOT ON HORIZONTAL AXIS. |
| YAXIS=VAXIS, VREF AND VMINOR OPTIONS FROM PROC PLOT OR |
| GPLOT. THESE MUST BE ENCLOSED IN DOUBLE QUOTES IF|
| USED. FOR EXAMPLE, |
| YAXIS="VAXIS=10 TO 20 BY 1 VREF=15 VMINOR=1". |
| XAXIS=HAXIS, HREF AND HMINOR OPTIONS FROM PROC PLOT OR |
| GPLOT. |
| THE FOLLOWING PARAMETERS APPLY ONLY FOR GPLOTS |
| PTYPE=TYPE OF PLOT. THIS MUST BE SET TO 'GPLOT' IF ONE|
| DESIRES A GRAPHICS PLOT, ELSE LEAVE IT BLANK FOR |
| A STANDARD LINE PRINTER PLOT. |
| LINE=ALLOWS ONE TO INCLUDE THE REGRESSION LINE ON THE |
| PLOT ALONG WITH CONFIDENCE LIMITS IF DESIRED. |
| THIS IS ONLY APPLICABLE FOR GPLOT. SEE PAGE 69 OF |
| THE SAS/GRAPH USERS GUIDE(V5) FOR DETAILS. |
| EXAMPLES ARE: |
| LINE=RL LINEAR REGN LINE ONLY. |
| LINE=RLCLM95 LINEAR REGN WITH CONF. |
| LIMITS(95%) FOR MEAN Y. |
| LINE=RLCLI95 LINEAR REGN WITH CONF. |
| LIMITS(95%) FOR INDIVID. |
| PREDICTED VALUES OF Y. |
| |
| PLTDATA=OUTPUT GRAPHICS CATALOG FOR SAVING THE GPLOT |
| GRAPH. |
|---------------<--- End of Files or Arguments Needed -->------------|
|--------------------------------------------------------------------|
|----------------<--- Start of Example and Usage -->-----------------|
| Example: |
| data one; |
| do x=1 to 50; |
| y=x2; |
| output; |
| end; |
| %plotcorr(data=one,yvar=y,xvar=x,ptype=gplot,line=rlci95, |
| pltdata=graf); |
| run; |
| quit; |
| Usage: %PLOTCORR(DATA=,YVAR=,XVAR=,YAXIS=,XAXIS=, |
| PTYPE=,LINE=,PLTDATA=WORK); |
\-------------------<--- End of Example and Usage -->---------------*/
%MACRO PLOTCORR(DATA=,YVAR=,XVAR=,YAXIS=,XAXIS=,
PTYPE=,LINE=,PLTDATA=WORK);
/*--------------------------------------------\
| Author: EJB; |
| Created: 2/9/89; |
| Modified: 9/3/93; |
| Purpose: PRODUCE Y*X SCATTER PLOT; |
\--------------------------------------------*/
DATA __A; SET &DATA(KEEP= &YVAR &XVAR );
__Y=&YVAR;
__X=&XVAR;
IF __Y=. OR __X=. THEN DO; __Y=.; __X=.; END; **IF ONE IS MISSING
SET BOTH TO BLANK;
PROC UNIVARIATE NOPRINT; VAR __Y __X;
OUTPUT OUT=__B N=N MEAN=MEAN_Y MEAN_X STD=SD_Y SD_X
MEDIAN=MED_Y MED_X MIN=MIN_Y MIN_X MAX=MAX_Y MAX_X;
DATA _NULL_; SET __B;
LENGTH _Y _X $8.;
_Y=SYMGET('YVAR');
_X=SYMGET('XVAR');
_YA=SYMGET('YAXIS');
_XA=SYMGET('XAXIS');
_YA=COMPRESS(_YA,'"');
_XA=COMPRESS(_XA,'"');
CALL SYMPUT('YAXIS',_YA);
CALL SYMPUT('XAXIS',_XA);
CALL SYMPUT('YVAR',_Y);
CALL SYMPUT('XVAR',_X);
CALL SYMPUT('NUSE',PUT(N,6.) );
CALL SYMPUT('MNY',PUT(MEAN_Y,BEST8.) );
CALL SYMPUT('MNX',PUT(MEAN_X,BEST8.) );
CALL SYMPUT('SDY',PUT(SD_Y,BEST8.) );
CALL SYMPUT('SDX',PUT(SD_X,BEST8.) );
CALL SYMPUT('MDY',PUT(MED_Y,BEST8.) );
CALL SYMPUT('MDX',PUT(MED_X,BEST8.) );
CALL SYMPUT('MIY',PUT(MIN_Y,BEST8.) );
CALL SYMPUT('MAY',LEFT(PUT(MAX_Y,BEST8.)) );
CALL SYMPUT('MIX',PUT(MIN_X,BEST8.) );
CALL SYMPUT('MAX',LEFT(PUT(MAX_X,BEST8.)) );
PROC CORR NOPRINT OUTP=__P OUTS=__S DATA=__A; VAR __Y; WITH __X;
DATA __C; SET __P(IN=INP) __S(IN=INS); IF _N_=1 THEN SET __B;
IF _TYPE_='CORR'; ** First obs. is Pearson corr(__Y);
** 2nd obs. is Spearman corr(__Y);
T= __Y*SQRT( (N-2)/(1-__Y**2) ); ** T statistic for test of r=0;
DF=N-2; ** Degrees of freedom for T;
R=ROUND(__Y,.0001); ** r=corr. coeff. rounded;
P=( 1-PROBT(ABS(T),DF) )*2; ** p-value for test of r=0;
P=ROUND(P, .0001);
IF INP THEN DO; ** Regression stats;
S2Y=(N-1)*SD_Y**2; ** Corrected ss for y;
S2X=(N-1)*SD_X**2; ** Corrreted ss for x;
RSQ=__Y**2; ** R-square;
B=__Y*SD_Y/SD_X; ** Slope;
A=MEAN_Y-B*MEAN_X; ** Intercept;
RMSE=SQRT(((1-RSQ)*S2Y)/(N-2)); ** Square root MSE or Sy.x;
SEB=RMSE*SQRT(1/S2X); ** Est. SE slope;
SEA=RMSE*SQRT(1/N + MEAN_X**2/S2X);** Est. SE intercept;
CALL SYMPUT('RHO',PUT(R,6.4 ) );
CALL SYMPUT('PRHO',PUT(P,5.4 ) );
CALL SYMPUT('B',PUT(B,BEST8.) );
CALL SYMPUT('A',PUT(A,BEST8.) );
CALL SYMPUT('SEB',PUT(SEB,BEST8.) );
CALL SYMPUT('SEA',PUT(SEA,BEST8.) );
CALL SYMPUT('SYX',PUT(RMSE,BEST8.) );
CALL SYMPUT('RSQ',PUT(RSQ,5.4) );
END;
IF INS THEN DO;
CALL SYMPUT('RHOS',PUT(R,6.4 ) );
CALL SYMPUT('PRHOS',PUT(P,5.4) );
END;
%IF %UPCASE(&PTYPE)=GPLOT %THEN %DO;
SYMBOL1 C=RED V=PLUS I=&LINE;
PROC GPLOT DATA=__A GOUT=&PLTDATA;
PLOT &YVAR*&XVAR / &YAXIS &XAXIS;
%END;
%ELSE %DO;
PROC PLOT DATA=__A;
PLOT &YVAR*&XVAR / &YAXIS &XAXIS;
%END;
%macro ftn(fn); footnote&fn .j=l .h=.7 %mend ftn;
%ftn(1) "DESC. STATS(N=&NUSE): Mean Std Median Range";
%ftn(2) " &YVAR(Y) &MNY &SDY &MDY &MIY => &MAY ";
%ftn(3) " &XVAR(X) &MNX &SDX &MDX &MIX => &MAX ";
%ftn(4) "CORRELATIONS: Pearson=&RHO(P=&PRHO) Spearman=&RHOS(P=&P
RHOS)";
%ftn(5) "REGRESSION(Y=A+BX): S(Y.X)=&SYX Rsquare=&RSQ";
%ftn(6) " A(SE)=&A(&SEA) B(SE)=&B(&SEB) ";
RUN; quit;
%ftn(1);
PROC datasets; DELETE __A __B __C __P __S; quit;
%MEND PLOTCORR;